# main.py
import numpy as np
import matplotlib.pyplot as plt

from MRI.fft_processor import FFTProcessor
from MRI.points_handler import PointsHandler
from points import Point

def main():
    handler = PointsHandler()
    a = True
    # 添加多个 Point 对象
    # T2 0.1 水  0.03 脂肪 B0 300mT
    handler.add_point(Point([20, 0], 1, T2=0.1, B0=300.0))
    handler.add_point(Point([60, 10], 1, T2=0.03, B0=300.0))
    handler.add_point(Point([0, 0], 1, T2=0.02, B0=300.0))
    handler.add_point(Point([20, -10], 1, T2=0.03, B0=300.0))

    signal_list = []

    # 磁场梯度 约为50mT 这里是从 正50 到 负50
    for i in range(50,-60,-10):
        print(i)

        # 应用 RF 脉冲
        handler.apply_rf_pulse()

        # 应用 y 方向梯度 和 x方向梯度
        handler.apply_y_gradient(x_gradient= 0,y_gradient = i, duration = 0.01)

        fs = 2000

        # 读取 x 方向梯度信号
        t, summed_signal = handler.read_out(x_gradient = 30, duration=0.02, sampling_rate=fs)

        if a and (i == 0 or i == -50):

            print(summed_signal)
            plt.plot(summed_signal)
            plt.title('Time Domain Magnitude of Summed Signal')
            plt.xlabel('time')
            plt.ylabel('Amplitude')
            plt.show()

            fftresult = np.fft.fft(summed_signal)
            fftresult = np.fft.fftshift(fftresult)
            print(fftresult)
            plt.plot(abs(fftresult))
            plt.title('Frequency Domain Magnitude of Summed Signal')
            plt.xlabel('frequency')
            plt.ylabel('Amplitude')

            plt.tight_layout()
            plt.show()

        signal_list.append(summed_signal)

    processor = FFTProcessor()

    #这里并没有做FFT 只是对信号做了拼接
    k_domain_signal = processor.fft(signal_list)

    plt.imshow(abs(k_domain_signal))
    plt.title('k_domain_signal')
    plt.colorbar()
    plt.tight_layout()
    plt.show()

    # 这部分应该整理之后再画出来

    ifft_image = processor.ifft(k_domain_signal)
    ifft_image = np.fft.fftshift(ifft_image)

    ifft_image = np.flipud(ifft_image)
    ifft_image = np.fliplr(ifft_image)


    plt.imshow(abs(ifft_image))
    plt.title('Reconstructed Image (IFFT)')
    plt.colorbar()
    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    main()